#-----------------------------------------------------------------------
# This Makefile is for building clm tools on AIX, Linux (with pgf90 or
# lf95 compiler), Darwin or IRIX platforms.
#
# $Id: Makefile 35671 2012-03-22 21:23:14Z mlevy@ucar.edu $
# $URL$
#
# These macros can be changed by setting environment variables:
#
# NETCDF_PATH --- Diretory location of netcdf
# LIB_NETCDF --- Library directory location of netcdf. (defaults to /usr/local/lib)
# INC_NETCDF --- Include directory location of netcdf. (defaults to /usr/local/include)
# MOD_NETCDF --- Module directory location of netcdf.  (defaults to $LIB_NETCDF)
# USER_FC ------ Allow user to override the default Fortran compiler specified in Makefile.
# USER_FCTYP --- Allow user to override the default type of Fortran compiler (linux and USER_FC=ftn only).
# USER_CC ------ Allow user to override the default C compiler specified in Makefile (linux only).
# USER_LINKER -- Allow user to override the default linker specified in Makefile.
# USER_CPPDEFS - Additional CPP defines.
# USER_CFLAGS -- Additional C compiler flags that the user wishes to set.
# USER_FFLAGS -- Additional Fortran compiler flags that the user wishes to set.
# USER_LDLAGS -- Additional load flags that the user wishes to set.
# SMP ---------- Shared memory Multi-processing (TRUE or FALSE) [default is FALSE]
# OPT ---------- Use optimized options.
#
#------------------------------------------------------------------------

# Definitions
null :=
CURDIR = .
EXENAME = ../gen_domain
RM = rm
MACROS = Macros.make

default: $(EXENAME)

$(MACROS):
	@echo "use the configure script located in the Machines directory to create the Makefile $(MACROS) file"

# Do not include Macros for clean or distclean targets
USE_MACROS=TRUE
ifeq ($(MAKECMDGOALS),clean)
  USE_MACROS=FALSE
endif
ifeq ($(MAKECMDGOALS),distcleanclean)
  USE_MACROS=FALSE
endif

ifeq ($(USE_MACROS),TRUE)
  -include $(MACROS)
endif

# Check for the netcdf library and include directories
ifdef NETCDF_PATH
  LIB_NETCDF:=$(NETCDF_PATH)/lib
  INC_NETCDF:=$(NETCDF_PATH)/include
  MOD_NETCDF:=$(NETCDF_PATH)/include
else
  ifeq ($(LIB_NETCDF),$(null))
    LIB_NETCDF := /usr/local/lib
  endif
  ifeq ($(INC_NETCDF),$(null))
    INC_NETCDF := /usr/local/include
  endif

  ifeq ($(MOD_NETCDF),$(null))
    MOD_NETCDF := $(LIB_NETCDF)
  endif
endif

# Set Fortran compiler
ifneq ($(SFC),$(null))
  FC := $(SFC)
endif

# Set user specified C compiler
ifneq ($(SCC),$(null))
  CC := $(SCC)
endif

# Set if Shared memory multi-processing will be used
ifeq ($(SMP),$(null))
  SMP := FALSE
endif

CPPDEFS += $(USER_CPPDEFS) -D$(OS)

# Set optimization on by default
ifeq ($(OPT),$(null))
  OPT := TRUE
endif

ifeq ($(OPT),TRUE)
  CPPDEFS += -DOPT
endif

# Load dependency search path.
dirs := . $(shell cat Filepath)

# Set cpp search path, include netcdf
cpp_dirs := $(dirs) $(INC_NETCDF) $(MOD_NETCDF)
cpp_path := $(foreach dir,$(cpp_dirs),-I$(dir)) # format for command line

# Expand any tildes in directory names. Change spaces to colons.
VPATH := $(foreach dir,$(cpp_dirs),$(wildcard $(dir)))
VPATH := $(subst $(space),:,$(VPATH))
ifdef CPRE
  FPPDEFS := $(patsubst -D%,$(CPRE)%,$(CPPDEFS))
else
  FPPDEFS := $(CPPDEFS)
endif
#Primary Target: build the tool
all: $(EXENAME) $(MACROS)

OBJS := gen_domain.o

#------------------------------------------------------------------------
# Default rules and macros
#------------------------------------------------------------------------

.SUFFIXES:
.SUFFIXES: .F90 .c .o

# Append user defined compiler and load flags to Makefile defaults
CFLAGS   += $(USER_CFLAGS) -I$(INC_NETCDF)
FFLAGS   += $(USER_FFLAGS) -I$(MOD_NETCDF) -I$(INC_NETCDF)
LDFLAGS  += $(USER_LDFLAGS)

# Set user specified linker
ifneq ($(USER_LINKER),$(null))
  LINKER := $(USER_LINKER)
else
  LINKER := $(FC)
endif

.F90.o:
	$(FC) -c $(FPPDEFS) $(FFLAGS) $<

.c.o:
	$(CC) -c $(CFLAGS) $<


$(EXENAME): $(OBJS)
	$(LINKER) -o $@ $(OBJS) $(SLIBS) $(LDFLAGS)

clean:
	$(RM) -f $(OBJS) $(EXENAME) *.mod *.optrpt

distclean: clean
	../../../configure --clean

gen_domain.o : gen_domain.F90
